package field

import (
	"strings"
	"yunj/pkg/yunj/core/builder/builderdto"
	"yunj/pkg/yunj/core/builder/form"
)

// 单选框
type Radio struct {
	form.Field
	Options []builderdto.Option `json:"options"` // 选项。例：[]dto.Option{{Value:"man","Label":"男"},{Value:"woman","Label":"女"}}
}

func NewRadio(id string, title ...string) *Radio {
	f := &Radio{}
	form.SetFieldInstance(&f.Field, f)
	f.SetFieldId(id)
	if len(title) > 0 {
		f.SetTitle(title[0])
	}
	return f
}

// 设置标题
func (f *Radio) SetTitle(title string) *Radio {
	f.Title = title
	return f
}

// 设置默认值
func (f *Radio) SetDefault(def any) *Radio {
	f.Default = def
	return f
}

// 设置描述
func (f *Radio) SetDesc(desc string) *Radio {
	f.Desc = desc
	return f
}

// 设置验证规则
func (f *Radio) SetVerify(rule string) *Radio {
	f.Verify = rule
	return f
}

// 设置验证标题
func (f *Radio) SetVerifyTitle(verifyTitle string) *Radio {
	f.VerifyTitle = verifyTitle
	return f
}

// 增加验证规则
func (f *Radio) AddVerify(rule string) *Radio {
	f.AddFieldVerify(rule)
	return f
}

// 设置是否只读
func (f *Radio) SetReadonly(yes bool) *Radio {
	f.Readonly = yes
	return f
}

// 设置栅格布局
// 超小屏幕(手机<768px)、小屏幕(平板≥768px)、中等屏幕(桌面≥992px)、大型屏幕(桌面≥1200px)、超大屏幕(桌面≥1400px)
// 总列数：12
func (f *Radio) SetGrid(num ...any) *Radio {
	f.Grid = num
	return f
}

// 设置权限
func (f *Radio) SetAuth(auth string) *Radio {
	f.Auth = auth
	return f
}

// 设置选项
func (f *Radio) SetOptions(options []builderdto.Option) *Radio {
	f.Options = options
	return f
}

// 处理属性
func (f *Radio) HandleAttr() error {
	if f.Options == nil || len(f.Options) <= 0 {
		return f.SetError("选项 Options 未配置！")
	}
	if f.Default == nil {
		f.Default = f.Options[0].Value
	}
	if !strings.Contains(f.Verify, "in") {
		suffix := builderdto.OptionValueCommaStr(f.Options)
		if f.Verify == "" {
			f.Verify = "in:" + suffix
		} else {
			f.Verify += "|in:" + suffix
		}
	}
	return nil
}
